package com.ctshk.rpc.hotel.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageReq;
import com.ctshk.common.model.PageResponse;
import com.ctshk.rpc.hotel.dto.h5.HotelDetailsDTO;
import com.ctshk.rpc.hotel.dto.h5.HotelHotsH5DTO;
import com.ctshk.rpc.hotel.dto.h5.HotelRoomDTO;
import com.ctshk.rpc.hotel.dto.h5.HotelSearchDTO;
import com.ctshk.rpc.hotel.dto.pc.HotelHotCityDTO;
import com.ctshk.rpc.hotel.dto.pc.HotelHotsPcDTO;
import com.ctshk.rpc.hotel.req.cache.HotelCacheOpsReq;
import com.ctshk.rpc.hotel.req.h5.HotelDetailsQueryH5Req;
import com.ctshk.rpc.hotel.req.h5.HotelQueryReq;
import com.ctshk.rpc.hotel.req.h5.RoomDetailsQueryH5Req;

import java.util.List;

/**
 * @description 酒店资源 服务类 - C端-H5
 * @author 谢诗宏
 * @date 2021/5/20
 */
public interface IHotelH5Service {

    /**
     * 检索缓存初始化
     * @return
     */
    Result cacheInit();

    /**
     * 缓存初始化推荐酒店列表
     * @return
     */
    Result initEsRecommend();

    /**
     * 更新缓存
     * 当B端修改成本/加幅时需要更新对应酒店缓存
     * @param id    酒店id
     */
    void cacheUpdate(long id);

    /**
     * 热门(推荐)酒店查询-C端-H5
     */
    PageResponse<HotelHotsH5DTO> queryRecommendations(PageReq req);

    /**
     * 热门(推荐)酒店查询-C端-H5-另一种方式
     */
    PageResponse<HotelHotsH5DTO> queryRecommendations2(PageReq req);

    /**
     * 热门(推荐)酒店查询-C端-PC
     */
    List<HotelHotCityDTO> queryRecommendationsPc();

    /**
     * 搜索酒店
     * @param req
     * @return
     */
    PageResponse<HotelSearchDTO> search(HotelQueryReq req);

    /**
     * 酒店详情
     * @param req
     * @return
     */
    Result<HotelDetailsDTO> detail(HotelDetailsQueryH5Req req);

    /**
     * 房间详情-填写订单页使用
     * @param req
     * @return
     */
    HotelRoomDTO detailRoom(RoomDetailsQueryH5Req req);
}
